﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using projecto_asp.Models;
using System.Diagnostics;

namespace projecto_asp.Models
{
    public class calendarModel
    {
        public int mes { get; set; }
        public int ano { get; set; }

        public List<Tuple<int, string, string>> dadosPreenchimentoCalendario(int cod_utilizador, bool docente)
        {
            momentoAvaliacao momento = new momentoAvaliacao();
            int dias_no_calendario = 42;
            List<Tuple<int, string, string>> dadosPreenchimento = new List<Tuple<int, string, string>>();

            DateTime data = new DateTime(ano, mes, 1);

            int tamanho_mes = DateTime.DaysInMonth(ano, mes);

            int inicio_mes = (int)data.DayOfWeek;

            int mes_anterior = mes - 1;
            int ano_anterior = ano;
            if (mes_anterior == 0)
            {
                mes_anterior = 12;
                ano_anterior -= 1;
            }

            int tamanho_mes_anterior = DateTime.DaysInMonth(ano_anterior, mes_anterior);

            int dia_mes_anterior = tamanho_mes_anterior - inicio_mes + 1;
            int dia_mes_actual = 1;
            int dia_mes_seguinte = 1;

            calendarModel modeloCalendario = new calendarModel();
            modeloCalendario.ano = ano;
            modeloCalendario.mes = mes;
            string ano_letivo = modeloCalendario.getAnoLetivoAtual();

            for (int i = 0; i <= dias_no_calendario; i++)
            {

                string teste = "";

                if (dia_mes_anterior <= tamanho_mes_anterior)
                {
                    dadosPreenchimento.Add(Tuple.Create(dia_mes_anterior, teste, "cinza"));
                    dia_mes_anterior += 1;
                }

                else if (dia_mes_actual <= tamanho_mes)
                {
                    teste = momento.getTeste(dia_mes_actual, mes, ano, ano_letivo, cod_utilizador, docente);
                    dadosPreenchimento.Add(Tuple.Create(dia_mes_actual, teste, "branco"));
                    dia_mes_actual += 1;
                }
                else
                {
                    dadosPreenchimento.Add(Tuple.Create(dia_mes_seguinte, teste, "cinza"));
                    dia_mes_seguinte += 1;
                }

            }

            return dadosPreenchimento;
        }

        public string getAnoLetivoAtual()
        {
            string ano_letivo = "";

            DateTime data_atual = DateTime.Today;

            bd1Entities bd = new bd1Entities();

            var ano_letivo_linq = (from sem_cal in bd.semestre_letivo
                                   from cal_lec in bd.calendario_letivo
                                   where (sem_cal.data_inicio <= data_atual && sem_cal.data_fim >= data_atual &&
                                          sem_cal.id_calendario == cal_lec.id_calendario)
                                   select cal_lec.ano_letivo).Distinct();

            foreach (var ano in ano_letivo_linq)
            {
                ano_letivo = ano;
            }

            return ano_letivo;
        }
    }
}